# _*_ coding:utf-8 _*_
# 开发团队: Mavericks
# 开发人员：Maverick·Ming
# 开发IDE： PyCharm
#   项目名：HelloWorld
#   文件名：7.05 关闭文件.py
# 开发时间：2021/3/29 11:35

# 创建文件名变量
file_name = 'demo.txt'

# 打开文件
file_obj = open(file_name)

# 当我们获取了文件对象以后，所有对文件的操作都需要通过对象file_obj进行
# 读取文件内容
content = file_obj.read()  # 如果文件里是英文，gbk编码器能解码，不需要任何参数即可读取

# 查看读取到的内容
print(content)

# 关闭文件
file_obj.close()

# 如何看出来已经关闭文件，再读取一次即可
try:
    file_obj.read()
except Exception as e:
    print('文件已关闭!无法io操作')
# 结果：ValueError: I/O operation on closed file.无法对已关闭文件进行io操作

# 手动调用close有点不好的是：在close前需要把操作做完
# 如果不确定操作结束与否，可能会提前调用close或者忘记调用close
# 这样就导致，每次操作文件都想着有没有写close，在哪里写close，些许小麻烦

# 这时可以用with ... as 语句
with open(file_name) as file_obj:
    # 在with语句中，可以直接使用file_obj来对文件进行io操作
    print('\nwith方式读取文件')
    print(file_obj.read(), type(file_obj.read()))  # read方法读取文件内容，将内容保存为一个字符串返回
    # 此时，这个文件只能在with语句中调用，with语句执行结束，自动close()关闭文件

# 在文件读取操作时，也可以自定义异常抛出信息
file_name = 'hello'
try:
    with open(file_name) as file_obj:
        print(file_obj.read())
except FileNotFoundError:
    # print(file_name, '文件未找到')
    print(f'{file_name}文件未找到')
